package com.cyan.note.service.manager;

import com.cyan.note.common.ApiResult;
import com.cyan.note.common.PageResult;
import com.cyan.note.dto.manager.order.*;

import java.util.List;

/**
 * 店长端-订单管理服务接口
 * 
 * @author ZhangzhenYu
 * @since 2025-01-15
 */
public interface ManagerOrderService {

    /**
     * 分页查询订单列表
     */
    ApiResult<PageResult<OrderListDTO>> getOrderList(Long shopId, OrderQueryDTO query);

    /**
     * 获取订单详情
     */
    ApiResult<OrderDetailDTO> getOrderDetail(Long shopId, Long orderId);

    /**
     * 手动创建订单（客服下单）
     */
    ApiResult<Long> createOrder(Long shopId, OrderCreateDTO orderCreateDTO, Long operatorId);

    /**
     * 分配订单给打手
     */
    ApiResult<Void> assignOrder(Long shopId, Long orderId, OrderAssignDTO orderAssignDTO, Long operatorId);

    /**
     * 手动结单
     */
    ApiResult<Void> completeOrder(Long shopId, Long orderId, OrderCompleteDTO orderCompleteDTO, Long operatorId);

    /**
     * 确认收款
     */
    ApiResult<Void> confirmPayment(Long shopId, Long orderId, OrderPaymentDTO orderPaymentDTO, Long operatorId);

    /**
     * 炸单处理
     */
    ApiResult<Void> cancelOrder(Long shopId, Long orderId, OrderCancelDTO orderCancelDTO, Long operatorId);

    /**
     * 重新分配订单（炸单后）
     */
    ApiResult<Void> reassignOrder(Long shopId, Long orderId, OrderAssignDTO orderAssignDTO, Long operatorId);

    /**
     * 获取可分配的打手列表
     */
    ApiResult<List<AvailableWorkerForOrderDTO>> getAvailableWorkers(Long shopId, String orderType, String startTime);

    /**
     * 获取订单状态统计
     */
    ApiResult<OrderStatusStatsDTO> getOrderStatusStats(Long shopId, String startDate, String endDate);

    /**
     * 批量操作订单
     */
    ApiResult<Void> batchOperateOrders(Long shopId, OrderBatchOperateDTO batchOperateDTO, Long operatorId);

    /**
     * 导出订单数据
     */
    ApiResult<String> exportOrders(Long shopId, String status, String startDate, String endDate, String format);
}